int Linking (ImSize, ThinMag, Chain)
int    ImSize;
BYTE   ** ThinMag;
ChnTyp * Chain;
{
   /* chain code (cc):  O NO  N NW  W SW  S SO   */
   static  int y [8] = {0,-1,-1,-1, 0, 1, 1, 1};
   static  int x [8] = {1, 1, 0,-1,-1,-1, 0, 1};
   int  r,c, rf,cf, rs,cs, i,l, cc;

   l = 0;
   for (r=1; r<ImSize-1; r++) {
      for (c=1; c<ImSize-1; c++)  if (ThinMag [r][c]) {
         rf = r;
         cf = c;
         i = 1;
         Chain[l].r = rf;
         Chain[l].c = cf;
         Chain[l].i = i;
         i++;
         l++;
         ThinMag [rf][cf] = 0;

         for  (cc=0; cc<8; cc++) {
            rs = rf + y[cc];
            cs = cf + x[cc];
            if (ThinMag [rs][cs])  {
               rf = rs;
               cf = cs;
               GetMem (Chain);
               Chain[l].r = rf;
               Chain[l].c = cf;
               Chain[l].i = i;
               i++;
               l++;
               ThinMag [rf][cf] = 0;
               cc=-1;   /* attention:  reset of loop counter */
   }  }  }  }
   l--;
   return (l);
}
